home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 52811 / 52811.xpi / chrome / content / crypt.js < prev    next >
Text File  |  2009-08-26  |  17KB  |  375 lines

  1. /*Crypt.js
  2. File per l'inizializzazione dell'add-on, permette di settare ivari parametri dell'add-on
  3. a seconda del tag trovato e di far partire la codifica e la decodifica della pagina
  4. caricata nel browser.
  5. */
  6.  
  7. //nome dell'add-on usato
  8. var nome_add_on="HTTcryPt";
  9.  
  10. //variabile globale necessaria alla localizzazione dell'add-on
  11. var strBundle = null;
  12.  
  13. var CRYPT = {
  14.  
  15.    onLoad: function() {
  16.     // initialization code
  17.     this.initialized = true;
  18.     
  19.     //gets a reference to the string bundle element added to crypt.xul by calling document.getElementById(), specifying the ID "string-bundle".       
  20.     strBundle = document.getElementById("string-bundle");
  21.        
  22.     //seleziona la textbox per inserire testo subito
  23.     document.getElementsByTagName("textbox")[0].focus();
  24.     
  25.     //determina il tipo di encrypt usato
  26.     CRYPT.checkTypeEncrypt();
  27.   },
  28.   
  29.   //apre la finestra contenente le informazioni sull'add-on
  30.   openAbout: function(){
  31.     window.open("chrome://crypt/content/about.xul", "", "chrome,centerscreen,dialog");
  32.   },
  33.   
  34.   //chiude la finestra dell'add-on
  35.   closeWindow: function(){
  36.     //forse non va
  37.     window.opener.removeEventListener("click", arguments.callee, false);
  38.     //chiude la finestra aperta
  39.     window.close();
  40.   },
  41.   
  42.   //Gestisce l'evento onKeyDown, per verificare se Φ stato premuto l'invio, in modo da far partire la conversione.
  43.   keyPressEvent: function(e){
  44.     // Add time we got here to entropy
  45.     ce();//in entropy.js
  46.     
  47.     var keynum;
  48.     //legge il carattere premuto
  49.     if(e.which){ // Netscape/Firefox/Opera
  50.       keynum = e.which;
  51.     }
  52.     //se ho premuto l'invio, allora fai parire la conversione
  53.     if(keynum==13){
  54.       CRYPT.init();
  55.     }  
  56.   },
  57.   
  58.   //nasconde o visualizza la password, a seconda del valore della checkbox
  59.   hidePwd: function(){
  60.     //determina la textbox contenente la password
  61.     var tmp=document.getElementsByTagName("textbox")[0];
  62.     //se il tipo non Φ specificato, allora settalo come nascosto
  63.     if(tmp.type=="")
  64.       tmp.type="password";
  65.     else //altrimenti
  66.       tmp.type="";
  67.   },
  68.   
  69.   checkTypeEncrypt: function() {
  70.     //preleva il meta relativa alla pagina da elaborare
  71.     var temp=CRYPT.checkMeta();
  72.     if(temp=="AES/TXT"){
  73.       //allora la password Φ testuale
  74.       document.getElementById("password").selectedIndex=0;
  75.       //The method getFormattedString() gets a string with the given key name from the bundle. In addition, each occurrence of formatting code (e.g. %S) is replaced by each successive element in the supplied array.
  76.       document.getElementById("found").value=strBundle.getFormattedString("resultMessage", [ "TXT", "AES" ]);
  77.     }
  78.     else if(temp=="AES/HEX"){
  79.       //allora la password Φ esadecimale
  80.       document.getElementById("password").selectedIndex=1;
  81.       document.getElementById("found").value=strBundle.getFormattedString("resultMessage", [ "HEX", "AES" ]);
  82.     }
  83.     else if(temp=="AES"){ //valore di default
  84.       document.getElementById("found").value=strBundle.getFormattedString("resultMessage", [ "Undefined", "AES" ]);
  85.     }
  86.     else if(temp=="BLOWFISH"){ //valore di default
  87.       document.getElementById("found").value=strBundle.getFormattedString("resultMessage", [ "Undefined", "BLOWFISH" ]);
  88.     }
  89.     else if(temp=="BLOWFISH/TXT"){
  90.       //allora la password Φ testuale
  91.       document.getElementById("password").selectedIndex=0;
  92.       document.getElementById("found").value=strBundle.getFormattedString("resultMessage", [ "TXT", "BLOWFISH" ]);
  93.     }
  94.     else if(temp=="BLOWFISH/HEX"){
  95.       //allora la password Φ esadecimale
  96.       document.getElementById("password").selectedIndex=1;
  97.       document.getElementById("found").value=strBundle.getFormattedString("resultMessage", [ "HEX", "BLOWFISH" ]);
  98.     }
  99.     else{ //la pagina non Φ crittata
  100.       //Fetches the strings from the bundle,by calling the string bundle's getString() method, passing the appropriate key for each string.  
  101.       document.getElementById("found").value=strBundle.getString('resultMessageNot')
  102.       //preparo l'add-on per velocizzare l'operazione di crittatura
  103.       document.getElementById("encryptYN").checked=true;
  104.       CRYPT.changeStyle();
  105.       return;
  106.     }  
  107.     //lo esegue solo se la pagina Φ crittata
  108.     //se la pagina Φ giα crittata, allora devo solo decrittarla, velocizzo l'operazione
  109.     if(document.getElementById("encryptYN").checked){
  110.       document.getElementById("encryptYN").checked=false;
  111.       CRYPT.changeStyle();
  112.     }  
  113.   },
  114.   
  115.   init: function() {
  116.     //preleva la password inserita e mette in "pwd.value"
  117.     pwd=document.getElementsByTagName("textbox")[0];
  118.       
  119.     //preleva i valori dei radiobox 
  120.       tipo_pwd_enc=document.getElementsByTagName("radio");
  121.       
  122.       //preleva il tipo di crittografia usata e mette in "tipo.label"
  123.       tipo=document.getElementsByTagName("menulist")[0];
  124.   
  125.       //preleva il "body" crittato arrivato dal server e lo salva in "body"
  126.       body=window.opener.content.document.body.innerHTML;
  127.      
  128.     //preleva la scelta fatta e mette in "check.checked"
  129.     check=document.getElementById("encryptYN");
  130.   
  131.     //    Our onLoad handler kicks off the collection of entropy    
  132.       ce();                            // Add time we got here to entropy
  133.       mouseMotionEntropy(60);       // Initialise collection of mouse motion entropy
  134.   
  135.     //chiama la funzione di calcolo
  136.     CRYPT.calculate(pwd,tipo,body,check,tipo_pwd_enc);     
  137.   },
  138.   
  139.   calculate: function(pwd,tipo,body,check,tipo_pwd_enc) { 
  140.      //estrae lista di div presenti nel documento
  141.      var listOfDiv=window.opener.content.document.getElementsByTagName("div");
  142.      var i=0; //serve, altrimenti, dopo la chiamata a Encrypt_text, i vale 96  
  143.      var divTrovato=0;//se ho trovato almeno un div valido
  144.      //se non ho selezionato l'opzione di encrypt e se la password esiste
  145.      if(check.checked==false && pwd.value.length>0){ //decritta il testo
  146.       var temp=CRYPT.checkMeta();//estraggo i meta
  147.       if(temp=="AES" || temp=="AES/TXT" || temp=="AES/HEX"){   
  148.         if(listOfDiv!=null){//se la lista di div non Φ vuota
  149.           for(i=0;i<listOfDiv.length;i++){
  150.             if(listOfDiv[i].className=="cryptYes"){//se la classe corrisponde
  151.               divTrovato=1;//ho trovato un div
  152.               testo_decrittato = Decrypt_text(pwd,listOfDiv[i].innerHTML,tipo_pwd_enc);//in jscrypt.js
  153.               listOfDiv[i].innerHTML = testo_decrittato;//inserisce il testo nel div
  154.             }
  155.           }
  156.         }
  157.         if(divTrovato==0){
  158.           testo_decrittato=Decrypt_text(pwd,body,tipo_pwd_enc);//in jscrypt.js
  159.           window.opener.content.document.body.innerHTML = testo_decrittato;//inserisce il testo nel body
  160.         } 
  161.         CRYPT.removeMeta();
  162.         CRYPT.removeCheckScript();
  163.         CRYPT.checkTypeEncrypt();
  164.       }
  165.       else if(temp =="BLOWFISH" || temp=="BLOWFISH/TXT" || temp=="BLOWFISH/HEX"){ 
  166.         var bf = new Blowfish(pwd.value,tipo_pwd_enc);// Blowfish.js
  167.         if(listOfDiv!=null){//se la lista di div non Φ vuota
  168.           for(i=0;i<listOfDiv.length;i++){
  169.             if(listOfDiv[i].className=="cryptYes"){//se la classe corrisponde
  170.               divTrovato=1;//ho trovato un div
  171.               testo_decrittato = bf.decryptBlowfish(listOfDiv[i].innerHTML,tipo_pwd_enc);
  172.               listOfDiv[i].innerHTML = testo_decrittato;//inserisce il testo nel div
  173.             }
  174.           }
  175.         }
  176.         if(divTrovato==0){
  177.           testo_decrittato = bf.decryptBlowfish(body,tipo_pwd_enc);
  178.           window.opener.content.document.body.innerHTML = testo_decrittato;//inserisce il testo nel body
  179.         } 
  180.         CRYPT.removeMeta();
  181.         CRYPT.removeCheckScript();
  182.         CRYPT.checkTypeEncrypt();
  183.       }
  184.     }
  185.     //se ho selezionato l'opzione di encrypt e se la password esiste
  186.     else if(check.checked==true && pwd.value.length>0){ //critta il testo
  187.       if(tipo.label=="AES"){//quando critto, leggo il valore dalla menulist
  188.         if(listOfDiv!=null){//se la lista di div non Φ vuota
  189.           for(i=0;i<listOfDiv.length;i++){
  190.             if(listOfDiv[i].className=="cryptYes"){//se la classe corrisponde
  191.               divTrovato=1;//ho trovato un div
  192.               testo_crittato=Encrypt_text(pwd,listOfDiv[i].innerHTML,tipo_pwd_enc);//in jscrypt.js
  193.               listOfDiv[i].innerHTML = testo_crittato;//inserisce il testo nel div
  194.             }
  195.           }
  196.         }
  197.         if(divTrovato==0){
  198.           testo_crittato=Encrypt_text(pwd,body,tipo_pwd_enc);//in jscrypt.js
  199.           window.opener.content.document.body.innerHTML = testo_crittato;//inserisce il testo nel body
  200.         }
  201.       }
  202.       else{
  203.         var bf = new Blowfish(pwd.value,tipo_pwd_enc);// Blowfish.js
  204.         if(listOfDiv!=null){//se la lista di div non Φ vuota
  205.           for(i=0;i<listOfDiv.length;i++){
  206.             if(listOfDiv[i].className=="cryptYes"){//se la classe corrisponde
  207.               divTrovato=1;//ho trovato un div
  208.               testo_crittato = bf.encryptBlowfish(listOfDiv[i].innerHTML,tipo_pwd_enc);
  209.               listOfDiv[i].innerHTML = testo_crittato;//inserisce il testo nel div
  210.             }
  211.           }
  212.         }
  213.         if(divTrovato==0){
  214.           testo_crittato = bf.encryptBlowfish(body,tipo_pwd_enc);
  215.           window.opener.content.document.body.innerHTML = testo_crittato;//inserisce il testo nel body
  216.         } 
  217.       }
  218.       CRYPT.addMeta(tipo,tipo_pwd_enc);
  219.       CRYPT.addCheckScript();
  220.       CRYPT.checkTypeEncrypt();
  221.     }
  222.     else//altrimenti
  223.       alert(strBundle.getString('pwdErrorMessage'));
  224.   },
  225.   
  226.   //inserisce uno script nel documento, per far visualizzare un pop-up quando non trova l'add-on installato
  227.   addCheckScript: function(){
  228.     var stringa=strBundle.getFormattedString("popUpMessage", [ nome_add_on ])
  229.     var toLink=strBundle.getString('popUpMessage2');
  230.     var link=strBundle.getString('popUpMessageLink');
  231.     scriptTag=window.opener.content.document.createElement('script');//crea un elemento script
  232.     scriptTag.type='text/javascript';//definisce il tipo
  233.     scriptTag.id="cryptCheckInstalledAddOn_JS";//definisce l'id
  234.     //inserimento codice dello script
  235.     scriptTag.text="if((navigator.userAgent).match(\""+ nome_add_on +"\")==null){document.write(\"<div id='informationbar' style='position: fixed; left: 0; width: 100%; text-indent: 5px; padding: 5px 0; background-color: lightyellow; border: 1px solid black;font: bold 12px Verdana;color: red;'>" + stringa + " <a href='" + link + "'>" + toLink + "</a></div></br></br>\")}";
  236.     //inserimento dello script nel documento
  237.     window.opener.content.document.getElementsByTagName("head")[0].appendChild(scriptTag);
  238.   },
  239.   
  240.   //rimuove lo script dal documento decrittato, in quanto non serve pi∙
  241.   removeCheckScript: function(){
  242.     // First, get the array of script-tag elements
  243.     scriptTag=window.opener.content.document.getElementsByTagName("script");
  244.     //se non Φ vuoto
  245.     if(scriptTag!=null){
  246.       for(i=0;i<scriptTag.length;i++){//per ogni script trovato
  247.         if(scriptTag[i].id=="cryptCheckInstalledAddOn_JS"){//se l'id corrisponde
  248.           window.opener.content.document.getElementsByTagName("head")[0].removeChild(scriptTag[i]);//rimuove lo script dallo head
  249.         }
  250.       }
  251.     }
  252.   },
  253.   
  254.   removeMeta: function() {//rimuove il meta se la pagina Φ stata decrittata, serve solo se dopo devo salvare la pagina 
  255.     // First, get the array of meta-tag elements
  256.     metaP=window.opener.content.document.getElementsByTagName("meta");
  257.     //se non Φ vuoto
  258.     if(metaP!=null){
  259.       for(i=0;i<metaP.length;i++){//per ogni meta trovato
  260.           if(metaP[i].name==nome_add_on){//se il nome corrisponde
  261.             if(metaP[i].content=="BLOWFISH" ||  metaP[i].content == "BLOWFISH/TXT" || metaP[i].content == "BLOWFISH/HEX" ||  metaP[i].content == "AES/TXT" || metaP[i].content == "AES/HEX" || metaP[i].content == "AES")
  262.               window.opener.content.document.getElementsByTagName("head")[0].removeChild(metaP[i]);//rimuove il meta dallo head
  263.           }
  264.       }
  265.     }
  266.   },
  267.   
  268.   checkMeta: function(){//ritorna il primo meta con le caratteristiche aspettate
  269.     metaP=window.opener.content.document.getElementsByTagName("meta");
  270.     if(metaP!=null){
  271.       for(i=0;i<metaP.length;i++){
  272.           if(metaP[i].name==nome_add_on){
  273.             return(metaP[i].content);//ritorna il valore del campo content
  274.           }
  275.         }
  276.       }
  277.   },
  278.   
  279.   addMeta: function(tipo,tipo_pwd_enc){//aggiunge un meta se la pagina Φ stata crittata, serve solo se dopo devo salvare la pagina 
  280.     // First, get the array of meta-tag elements
  281.     metaP=window.opener.content.document.getElementsByTagName("meta");
  282.     //se non Φ vuoto
  283.     if(metaP!=null){
  284.       for(i=0;i<metaP.length;i++){
  285.           if(metaP[i].name==nome_add_on){//se il nome corrisponde
  286.             if(metaP[i].content!="BLOWFISH" && tipo.label=="Blowfish"){//serve solo per eventuali errori nella fase di creazione della pagina html
  287.               if(tipo_pwd_enc[0].selected)//se la password Φ testuale
  288.                 metaP[i].content = "BLOWFISH/TXT";//cambia solo il contenuto
  289.               else if(tipo_pwd_enc[1].selected)
  290.                 metaP[i].content = "BLOWFISH/HEX";
  291.               else//default
  292.                 metaP[i].content = "BLOWFISH";
  293.               return;
  294.             }
  295.             else if(metaP[i].content!="AES" && tipo.label=="AES"){//serve solo per eventuali errori nella fase di creazione della pagina html    
  296.               if(tipo_pwd_enc[0].selected)//se la password Φ testuale
  297.                 metaP[i].content = "AES/TXT";
  298.               else if(tipo_pwd_enc[1].selected)
  299.                 metaP[i].content = "AES/HEX";
  300.               else//default
  301.                 metaP[i].content = "AES";
  302.               return;
  303.             }
  304.             else if(metaP[i].content=="BLOWFISH" && tipo.label=="Blowfish")//se Φ gia OK non fa niente
  305.               return;
  306.             else if(metaP[i].content=="AES" && tipo.label=="AES")//se Φ gia OK non fa niente
  307.               return;
  308.           }
  309.         }
  310.       }
  311.       //crea un nuovo elemento meta
  312.       metatag=window.opener.content.document.createElement('meta');
  313.       metatag.name=nome_add_on;//gli associa il nome dell'add-on
  314.       if(tipo.label=="AES"){//se ho crittato in AES
  315.         if(tipo_pwd_enc[0].selected)//se la password Φ testuale
  316.           metatag.content = "AES/TXT";
  317.         else if(tipo_pwd_enc[1].selected)
  318.           metatag.content = "AES/HEX";
  319.         else//default
  320.          metatag.content=tipo.label.toUpperCase();
  321.       }
  322.       else{//se ho crittato in BLOWFISH
  323.         if(tipo_pwd_enc[0].selected)//se la password Φ testuale
  324.           metatag.content = "BLOWFISH/TXT";
  325.         else if(tipo_pwd_enc[1].selected)
  326.           metatag.content = "BLOWFISH/HEX";
  327.         else//default
  328.           metatag.content=tipo.label.toUpperCase();
  329.       }
  330.       //aggiunge il meta nel documento 
  331.       window.opener.content.document.getElementsByTagName("head")[0].appendChild(metatag);
  332.   },
  333.     
  334.   //genera una chiave premendo l'apposito tasto
  335.   genKey: function(){
  336.     //determina il tipo di password scelto
  337.     tipo_pwd_enc=document.getElementsByTagName("radio");
  338.     if(tipo_pwd_enc[0].selected)//se la password Φ testuale
  339.       suffix=strBundle.getString('genKeySuffixTxt');
  340.     else
  341.       suffix=strBundle.getString('genKeySuffixHex');
  342.     //apre una finestra "alert" contenente la password
  343.     alert(strBundle.getFormattedString("genKeyMessage", [ Generate_key(tipo_pwd_enc), suffix ]));
  344.   },
  345.   
  346.   //cambia lo stile di visualizzazione di alcuni elementi nella UI, rendendoli abilitati o no
  347.   changeStyle: function() {
  348.     document.getElementsByTagName("menulist")[0].disabled = ! document.getElementsByTagName("menulist")[0].disabled;
  349.     document.getElementById("encoding").disabled = ! document.getElementById("encoding").disabled;
  350.     document.getElementById("gen").disabled = ! document.getElementById("gen").disabled;
  351.   },
  352.   
  353.   //resetta l'add-on, come se fosse stato appena aperto
  354.   resetDefault: function() {
  355.     //svuota la textbox
  356.     document.getElementsByTagName("textbox")[0].value="";
  357.     //seleziona il tipo di password come testuale, andando a prendere il primo groupbox
  358.     document.getElementsByTagName("radiogroup")[0].selectedIndex=0;
  359.     //deseleziona il checkbox di hide/show password
  360.     if(document.getElementById("pwdHS").checked==true){
  361.       document.getElementById("pwdHS").checked=false;
  362.       CRYPT.hidePwd();//devo cambiare lo stile della textbox
  363.     }
  364.     //seleziona il tipo di crittografia (AES)
  365.     document.getElementsByTagName("menulist")[0].selectedIndex =0;
  366.     //seleziona il tipo di codifica come codegroup, andando a prendere il secondo groupbox
  367.     document.getElementsByTagName("radiogroup")[1].selectedIndex=0;
  368.     
  369.     //seleziona la textbox per inserire testo subito
  370.     document.getElementsByTagName("textbox")[0].focus();
  371.   }
  372. };
  373.  
  374. //quando apro l'add-on, associagli l'evento onLoad
  375. window.addEventListener("load", function(e) { CRYPT.onLoad(e); window.removeEventListener("load", arguments.callee, false);}, false);